package cn.dt70.service;

import cn.dt70.pojo.AqbProject;
import cn.dt70.utils.PageSupport;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

public interface AqbProjectService {

    /**
     * 新增一条项目记录
     * @param aqbProject 项目对象
     * @return
     */
    boolean addProBase(AqbProject aqbProject);

    /**
     * 修改项目信息
     * @param aqbProject 项目对象
     * @return
     */
    boolean modifyProject (AqbProject aqbProject);


//    List<AqbProject> findProjectList(Integer createrId,Integer proType,Integer proStatus1,Integer proStatus2, Integer pageIndex);

    /**
     * 查询项目列表
     * @param createrId 申请人ID
     * @param proType 项目类型
     * @param proStatus1 项目状态1（AND--sql）
     * @param proStatus2 项目状态2（OR--sql）
     * @param pageSupport 分页类（需在调用之前设置totalCount,currentPageNo）
     *                    若不要分页，pageSupport传入null即可
     * @return
     */
    List<AqbProject> findProjectList(Integer createrId, Integer proType, Integer proStatus1, Integer proStatus2, PageSupport pageSupport);

    /**
     * 查询项目列表条数
     * @param createrId 申请人ID
     * @param proType 项目类型
     * @param proStatus1 项目状态1（AND--sql）
     * @param proStatus2 项目状态2（OR--sql）
     * @return
     */
    Integer findTotalCountOfProjectList(Integer createrId,Integer proType,Integer proStatus1,Integer proStatus2);

    /**
     * 查询单条项目
     * @param proId 项目ID
     * @param proCode 项目编码
     * @return
     */
    AqbProject findOneProject(Integer proId,String proCode);

    AqbProject findSpecialProject(Integer proType);

    /**
     * 查询还款与未还款的项目列表
     * @param createrId 借款人ID
     * @param proStatus1 项目状态1（AND--sql）
     * @param proStatus2 项目状态2（OR--sql）
     * @param pageSupport 分页类（需在调用之前设置totalCount,currentPageNo）
     *                    若不要分页，pageSupport传入null即可
     * @return
     */
    List<AqbProject> findReturnProjectList(Integer createrId, Integer proStatus1, Integer proStatus2, PageSupport pageSupport);

    /**
     * 查询待审核的项目列表（审核人员调用）
     * @param pageSupport 分页类（需在调用之前设置totalCount,currentPageNo）
     *                    若不要分页，pageSupport传入null即可
     * @return
     */
    List<AqbProject> findAssessNeedProjectList(PageSupport pageSupport);

    /**
     * 查询可以投标的项目列表
     * @param proType 项目类型
     * @param pageSupport 分页类（需在调用之前设置totalCount,currentPageNo）
     *                    若不要分页，pageSupport传入null即可
     * @return
     */
    List<AqbProject> findAssessdProjectList(Integer proType,PageSupport pageSupport);

    /**
     * 插入详情ID（关联项目详情）
     * @param detailId 项目详情ID（product）
     * @param proId 项目ID
     * @return
     */
    boolean modifyDetailIdOfProject(Integer detailId, Integer proId);

    /**
     * 更改项目已筹集金额
     * @param newBid 新投入的金额
     * @param proId 项目ID
     * @return
     */
    boolean modifyCurrentBids(Integer newBid, Integer proId);

    /**
     * 更改项目审核通过日期
     * @param date 审核通过日期（当前日期）
     * @param proId 项目ID
     * @return
     */
    boolean modifyAsseseDate(Date date, Integer proId);

    /**
     * 更改项目满标日期
     * @param date 满标日期（当前日期）
     * @param proId 项目ID
     * @return
     */
    boolean modifyFullDate(Date date, Integer proId);

    /**
     * 更改项目状态
     * @param status 状态值（0.审核中；1.审核通过开始投标；2.流标；3.还款中；4.还款完毕）
     * @param proId 项目ID
     * @return
     */
    boolean modifyStatus(Integer status, Integer proId);

    /**
     * 更改项目累计已还本金
     * @param newPayMoney 新还的本金
     * @param proId 项目ID
     * @return
     */
    boolean modifyPayMoneySum(BigDecimal newPayMoney, Integer proId);

    /**
     * 更改项目已还利息
     * @param newPayInterest 新还的利息
     * @param proId 项目ID
     * @return
     */
    boolean modifyPayInterestSum(BigDecimal newPayInterest, Integer proId);

    /**
     * 更改项目应还利息
     * @param payableInterest 应还的利息
     * @param proId 项目ID
     * @return
     */
    boolean modifyPayableInterest(BigDecimal payableInterest, Integer proId);

    List<AqbProject> proList(Integer createrId, Integer proType, Integer status1,Integer status2,String userName,PageSupport ps);

    AqbProject aqbPro(String proCode);

    //根据编码修改状态
    boolean updSatus(int proStatus,String proCode);
}
